草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 重载 -> 运营商通过代理转发成员访问

我正在尝试包装PythonPyObject*在Object类(class)。在Python中,一切都是PyObject*.列表是PyObject*,列表中的每一项本身就是一个PyObject*.这甚至可以是另一个列表。等我正在尝试允许fooList[42]=barObj通过代理模式(here)的样式语法。现在我已经可以正常工作了,我想扩展它以便fooList[42]可以用作Object.具体来说,我希望能够处理...fooList[42].myObjMethod()fooList[42].myObjMember=...Object有很多方法,目前fooList[42].myObjMet

c++ - 这个函数重载是否正确?

考虑在一个C++程序中包含这四个函数:voida(intval){cout我有几个问题:代码会不会有什么错误?还是它们都重载而没有任何错误。你能告诉我如何正确调用所有这四个函数吗?我的尝试如下:intiTmp;int*pTmp;doubledTmp;a(iTmp);a(iTmp);a(pTmp);a(dTmp); 最佳答案 唯一的问题是函数:voida(int&val)和voida(intval)编译器会产生以下错误:Compilationerrortime:0memory:3140signal:0prog.cpp:Infuncti

c++ - 使用 "operator T*()"而不是 "T* operator->()"进行成员访问

表达式x->y要求x是指向完整类类型的指针,或者当x是类的实例时,需要为x定义的operator->()。但是如果是后者,为什么不能我可以使用转换函数来代替(即将对象x转换为指针)?例如:structA{intmi;operatorA*(){returnthis;}};intmain(){Aa;a[1];//ok:equivalentto*(a.operatorA*()+1);a->mi;//ERROR}这给出了一条错误信息:错误:“->”的基操作数具有非指针类型“A”但问题是,为什么它不像a[1]那样使用a.operatorA*()呢? 最佳答案

c# - 为什么 SWIG C# 重载失败?

所以有一个simplecodeinC++.拥有一个C++库:classA{public:virtualvoidCall();virtualvoidCallCall();virtual~A();};还有一个swig文件:%{#include"A.h"%}%include"A.h"%module(directors="1")TestSWIG;%feature("director")A;调用SWIG生成器后,将生成的C++和C#文件包含到相关项目中并重建所有项目。swig.exe-c++-csharp-namespaceTestSWIG-outdir./Sharp/TestSWIG-o./T

c++ - 使用 enable_if 重载函数时出错

我有这段代码,其中一个函数根据可用的成员有不同的实现:#includetemplatestructD{structinner{Tfirst;};};templatestructD{usinginner=std::vector;};templateclassC{usingB=D;typenameB::innerb;public:typenamestd::enable_if().first),T>::value,T>::typefirst(){returnb.first;}typenamestd::enable_if()[0]),T>::value,T>::typefirst(){retu

c++ STL map::operator []在被删除的条目上完成

std::mapbar;intfoo(intkey){bar.erase(key);return1;}intmain(){bar[0]=foo(0);return0;}这段代码是用GCC4.8编译的,在用电围栏检查内存使用情况时会出现段错误。LD_PRELOAD=libefence.so.0.0./a.out问题来自于编译器生成的代码开始在映射中分配一个新条目,然后执行foo()以获取要放入bar[的值0]。在运行foo()时,条目被销毁,代码最终通过写入未分配的内存结束。操作的排序方式取决于编译器实现,还是由C++当前标准指定? 最佳答案

c++ - operator<< with boost::variant 是如何实现的

我明白boost::variant是这样实现的templatestructvariant{std::aligned_union::typebuffer;....};我们如何制作operator对于像这样的结构,打印缓冲区中存储的类型并将其传递给operator对于cout?为此,我们需要知道存储在缓冲区中的元素的类型,对吧?有没有办法知道这一点?此外,我正在寻找对此类实现的解释(如果存在的话)。不仅仅是它的存在以及我如何使用它。 最佳答案 Boost有一个apply_visitor函数,它接受一个通用函数对象并将变量的类型传递给它。

基类和继承类之间的C++函数重载

考虑下面的例子。我猜想因为func是虚拟的,所以调用哪个实现的决定将在运行时根据实例类型(类型B)和参数类型(short或int)完成然而,在运行这段代码后,我得到了意想不到的结果,指针类型只决定了跳转哪个函数,这完全打破了我对多态性的基本假设...这引出了一个问题,我在哪里可以将2func实现与函数重载联系起来?谁能告诉我是什么原因导致了这个结果?谢谢classA{public:virtualvoidfunc(shortx){printf("A::func%d\n",x);}};classB:publicA{public:virtualvoidfunc(intx){printf("B

c++ - 基类重载方法,默认成员变量

我有一个类结构如下:classBase{public:voidsetDefault(uint8_tmy_default){m_default=my_default;}voidmethod(uint8_t*subject){method(subject,m_default);}virtualvoidmethod(uint8_t*subject,uint8_tparameter)=0;protected:uint8_tm_default;};classDerived1:publicBase{public:voidmethod(uint8_t*subject,uint8_tparameter

c++ - 使用自定义类的 C++ STL 映射的运算符重载

我对在C++中使用STLmap有疑问。我知道将map与自定义类一起使用我需要重载“#include#includeusingnamespacestd;structbox{inte,s,w;box():e(-1),s(-2),w(-3){}booloperatorhashtable;boxb;hashtable[b]=1;return0;}在这里,我非常简单地重载了booloperator还有其他方法。所以我的问题是,这样做,重载我在这里的唯一动机是存储成对的box和int(请参阅main函数),以便我可以在O(log(n))时间内访问它们。更新我认为有一个糟糕的比较器不会影响map的访